﻿define(function (require, exports, module) {
    var CReader_TextSelectTool = require("./Reader_TextSelectTool.js");

    /**
    * @description 文本选择工具的名称.
    * @public
    * @constant
    * @type {String}
    */
    FXREADER.TOOL_NAME_SELECTTEXT = "Select Text";

    /**
    * @description 文本选择工具类.
    * @class 文本选择工具类.
    * @extends FXREADER.Event.IReader_ToolHandler
    * @constructor
    * @return 一个实例
    */
    FXREADER.Event.CReader_TextSelectionToolHandler = function () {
        var _bLButtonDown = false,
              _pTextSelectTool = null,
             _pReaderApp = null;
        /**
        * @description 文本选择处理对象
        * @public
        * @field
        * @type{FXREADER.TextSelect.CReader_TextSelectTool}
        */
        this.m_pSelectionHandler = null;

        /**
        * @description 获取文本选择处理对象
        * @return {FXREADER.TextSelect.CReader_TextSelectTool} 返回文本选择处理对象
        */
        this.GetTextSelectTool = function () {
            return _pTextSelectTool;
        };

        /**
        * @description 初始化工具时调用
        * @param {FXREADER.CReaderApp} pReaderApp App对象
        */
        this.Tool_OnInit = function (pReaderApp) {
            _pReaderApp = pReaderApp;
            //_pTextSelectTool = new CReader_TextSelectTool(pReaderApp, true);
            _pTextSelectTool = CReader_TextSelectTool.CreateTextSelectTool(pReaderApp, true);
            //  this.m_pSelectionHandler = new CReader_SelectionHandler(m_pReaderApp);
            //  _pReaderApp->RegisterSelectionHandler(m_pHandler);

        }
        /**
        * @description 销毁工具时调用
        */
        this.Tool_Destroy = function () {
            this.m_pSelectionHandler = null;
        }
        /**
        * @description 获取工具的名称
        * @return {String} 工具的名称;
        */
        this.Tool_GetName = function () {
            return FXREADER.TOOL_NAME_SELECTTEXT;
        }

        // UI Events
        /**
        * @description 激活工具时调用
        */
        this.Tool_OnActivate = function () {
            if (_pReaderApp.GetMainView() != null) {
                var pDocView = _pReaderApp.GetMainView().GetDocView();
                var jqDocViewContainer = $("#" + pDocView.GetDocViewContainerID());
                jqDocViewContainer.css({ 'cursor': "text" });
            }
            var pTextToolCommand = _pReaderApp.GetCommand("TextToolSelect");
            pTextToolCommand && pTextToolCommand.SetState(true);
        };
        /**
        * @description 停用工具时调用
        */
        this.Tool_OnDeactivate = function () {
            /*	if(_pReaderApp->GetCurrentDocument())
            _pReaderApp->GetCurrentDocument()->GetTextSelectTool()->DeselectAll();*/
            _pTextSelectTool.ClearSelection();
            var pTextToolCommand = _pReaderApp.GetCommand("TextToolSelect");
            pTextToolCommand && pTextToolCommand.SetState(false);
        };

        // Calculate status
        /**
        * @description 判断该工具是否可用
        * @return {Boolean} 可用返回true,否则返回false;
        */
        this.Tool_IsEnabled = function () {
            /*var pCurrentDocument = _pReaderApp.GetMainView().GetDocView().GetPDFDoc();
            if (pCurrentDocument) {
                if (pCurrentDocument.GetDocType() == FXREADER.PDFData.DocType.XFA)
                    return false;
            }*/
            return true;
        };
        /**
        * @description 判断该工具是否正处于文本选择状态
        * @return {Boolean} 正处于文本选择状态返回true,否则返回false;
        */
        this.Tool_IsProcessing = function () {
            return _bLButtonDown;
        }

        // Mouse events
        /**
        * @description 鼠标左键按下事件处理
        * @param {object} event 鼠标事件对象
        * @return {Boolean} 处理返回true,否则返回false;
        */
        this.Tool_OnLButtonDown = function (event) {
            _bLButtonDown = true;
            var pDocView = _pReaderApp.GetMainView().GetDocView();
            var jqDocViewContainer = $("#" + pDocView.GetDocViewContainerID());
            if (!FXREADER.Common.ContainsNode(jqDocViewContainer.get(0), event.target, true)) {
                return false;
            }

            _pTextSelectTool.Select_OnLButtonDown(event);
            /*  if(pPageView != null)
            {
            pPageView->GetReaderPage()->GetDocument()->GetTextSelectTool()->Select_OnLButtonDown(pPageView,point);
            }*/
            return true;
        }
        /**
        * @description 鼠标左键弹起事件处理
        * @param {object} event 鼠标事件对象
        * @return {Boolean} 处理返回true,否则返回false;
        */
        this.Tool_OnLButtonUp = function (event) {
            _bLButtonDown = false;
            _pTextSelectTool.Select_OnLButtonUp(event);
            if (!_pTextSelectTool.GetSelectedText() == "") {

            }
            return true;
        };
        /**
        * @description 鼠标左键双击事件处理
        * @param {object} event 鼠标事件对象
        * @return {Boolean} 处理返回true,否则返回false;
        */
        this.Tool_OnLButtonDblClk = function (event) {
            var pDocView = _pReaderApp.GetMainView().GetDocView();
            var jqDocViewContainer = $("#" + pDocView.GetDocViewContainerID());
            if (!FXREADER.Common.ContainsNode(jqDocViewContainer.get(0), event.target, true)) {
                return false;
            }
            _pTextSelectTool.Select_OnLButtonDblClk(event);
            return true;
        }
        /**
        * @description 主窗体的鼠标移动事件处理
        * @param {object} event 鼠标事件对象
        * @return {Boolean} 处理返回true,否则返回false;
        */
        this.Tool_OnMouseMove = function (event) {
            _pTextSelectTool.Select_OnMouseMove(event);
            return true;
        };
        /**
        * @description 鼠标右键按下事件处理
        * @param {object} event 鼠标事件对象
        * @return {Boolean} 处理返回true,否则返回false;
        */
        this.Tool_OnRButtonDown = function (event) {
            return false;
        };
        /**
        * @description 鼠标右键弹起事件处理
        * @param {object} event 鼠标事件对象
        * @return {Boolean} 处理返回true,否则返回false;
        */
        this.Tool_OnRButtonUp = function (event) {
            return false;
        };
        /**
        * @description 鼠标右键双击事件处理
        * @param {object} event 鼠标事件对象
        * @return {Boolean} 处理返回true,否则返回false;
        */
        this.Tool_OnRButtonDblClk = function (event) {
            return false;
        };
        /**
        * @description 鼠标滚轮滚动事件处理
        * @param {object} event 鼠标事件对象
        * @return {Boolean} 处理返回true,否则返回false;
        */
        this.Tool_OnMouseWheel = function (event) {
            return false;
        };
        /**
        * @description 鼠标移进事件（鼠标移动到它子元素时也会触发该事件）处理
        * @param {object} event 鼠标事件对象
        * @return {Boolean} 处理返回true,否则返回false;
        */
        this.Tool_OnMouseOver = function (event) {
            return false;
        };
        /**
        * @description 鼠标移出事件（鼠标移动到它子元素时也会触发该事件）处理
        * @param {object} event 鼠标事件对象
        * @return {Boolean} 处理返回true,否则返回false;
        */
        this.Tool_OnMouseOut = function (event) {
            return false;
        };
        /**
        * @description 鼠标进入事件（鼠标只有进入该元素区域才会触发该事件）处理
        * @param {object} event 鼠标事件对象
        * @return {Boolean} 处理返回true,否则返回false;
        */ 
        this.Tool_OnMouseEnter = function (event) {
            return false;
        };
        /**
        * @description 鼠标离开事件（鼠标只有离开该元素区域才会触发该事件）处理
        * @param {object} event 鼠标事件对象
        * @return {Boolean} 处理返回true,否则返回false;
        */
        this.Tool_OnMouseLeave = function (event) {
            _pTextSelectTool.Select_OnLButtonUp(event);
            return false;
        };

    };

    return FXREADER.Event.CReader_TextSelectionToolHandler;
});